/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package domain;

import data.FileControllerD;
import data.UserController;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;

/**
 *
 * @author oriol.cano
 */
public class UserDomainController {

    static private UserDomainController singleton;
    private User usuari;

    public static UserDomainController getInstance() {

		if(singleton == null) {
			singleton = new UserDomainController();
        }
		return singleton;
	}

    public void initUserLog() {
      UserController u = new UserController();
      u.initUserLog();
    }

	public void register(int id, String name, String password) {
		UserController u = new UserController();
		u.register(id,name,password);
    }

	public boolean checkAvailability(String name) {
		UserController u = new UserController();
		boolean res = u.checkAvailavility(name);
		return res;
	}

	private void updateUser(int id, String name, String pass) {
		UserController u = new UserController();
		u.updateUser(id, name, pass);
	}

	public int getNextID() {
		UserController u = new UserController();
		int id = u.getNextID();
		return id;
	}
/**
    *
    *
    * Comprova que l'usuari existeix i retorna la seva id.
	* Crea una instància de la classe User amb els paràmetres de l'usuari que ha fet el login.
    *
    * @author Oriol Caño
    * @param String name: Nom de l'usuari a cercar
    * @param String password: Contrasenya de l'usuari a cercar
    * @return retorna l'id de l'usuari amb el nom d'usuari name i la contrasenya pass,
  * si l'usuari no existeix retorna 0
    * @throws si hi ha un error retorna -1
    */
	public int login(String user, String pass) {
		UserController u = new UserController();
		int res = u.checkLogin(user, pass);
		if (res != 0) {
			usuari = new User();
			usuari.setID(res);
			usuari.setName(user);
			usuari.setPassword(pass);
			UserController uc = new UserController();
			Constants.setN(uc.getN(res));
			Constants.setGAMMA(uc.getG(res));
			Constants.setSUGGESTIONS(uc.getS(res));
			StatisticDomainController sc = new StatisticDomainController();
			sc.loadStatistics(res);
		}
		return res;
	}

	public void logout() {
		int id = usuari.getID();
		String name = usuari.getName();
		String pass = usuari.getPassword();
		updateUser(id,name,pass);
		usuari = null;
		if (id != 0) {
			UserController uc = new UserController();
			uc.setN(id, Constants.getN());
			uc.setG(id, Constants.getGAMMA());
			uc.setS(id, Constants.getSUGGESTIONS());
			StatisticDomainController sc = new StatisticDomainController();
			sc.saveStatistics(id);
		}
	}


	public BufferedReader getVerbs(int id) {
		UserController u = new UserController();
		BufferedReader res = u.getVerbs(id);
		return res;
	}

    public void changeUsername(String name) {
		usuari.setName(name);
    }

    public void deleteUser(int id) {
		UserController u = new UserController();
		u.deleteUser(id);
    }

	public void resetModel(int id) {
		UserController u = new UserController();
		u.resetModel(id);
	}

    public void changePassword(String password) {
		usuari.setPassword(password);
    }

    public String getUsername() {
        return usuari.getName();
    }

    public String getPassword() {
        return usuari.getPassword();
    }

	public void addVerbToDict(String s, int id) {
		UserController uc = new UserController();
		uc.addVerbToDict(s,id);
	}

}
